/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Markus Alexander Kuppe, Versant Corporation - bug #215797
* Friederike Schertel <friederike@schertel.org> - Bug 478336
*******************************************************************************/
package org.eclipse.ui.internal.registry;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.e4.ui.model.LocalizationHelper;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
import org.eclipse.e4.ui.workbench.IResourceUtilities;
import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IPluginContribution;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.views.IViewDescriptor;
public class ViewDescriptor implements IViewDescriptor, IPluginContribution {
private MApplication application;
private MPartDescriptor descriptor;
private IConfigurationElement element;
private String[] categoryPath;
private ImageDescriptor imageDescriptor;
public ViewDescriptor(MApplication application, MPartDescriptor descriptor,
IConfigurationElement element) {
this.application = application;
this.descriptor = descriptor;
this.element = element;
String category = descriptor.getCategory();
if (category != null) {
categoryPath = category.split("/"); //$NON-NLS-1$
}
}
@Override
public IViewPart createView() throws CoreException {
if (element == null) {
throw new CoreException(new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH,
"Unable to create an e4 view of id " + descriptor.getElementId())); //$NON-NLS-1$
}
return (IViewPart) element.createExecutableExtension("class"); //$NON-NLS-1$
}
@Override
public String[] getCategoryPath() {
return categoryPath;
}
@Override
public String getDescription() {
return element == null ? "" : RegistryReader.getDescription(element); //$NON-NLS-1$
}
@Override
public String getId() {
return descriptor.getElementId();
}
@Override
public ImageDescriptor getImageDescriptor() {
if (imageDescriptor == null) {
String iconURI = descriptor.getIconURI();
if (iconURI == null) {
// If the icon attribute was omitted, use the default one
IWorkbench workbench = (IWorkbench) application.getContext().get(
IWorkbench.class.getName());
imageDescriptor = workbench.getSharedImages().getImageDescriptor(
ISharedImages.IMG_DEF_VIEW);
} else {
ISWTResourceUtilities utility = (ISWTResourceUtilities) application.getContext()
.get(IResourceUtilities.class.getName());
imageDescriptor = utility.imageDescriptorFromURI(URI.createURI(iconURI));
}
}
return imageDescriptor;
}
@Override
public String getLabel() {
return LocalizationHelper.getLocalized(descriptor.getLabel(), descriptor,
application.getContext());
}
@Override
public float getFastViewWidthRatio() {
return 0;
}
@Override
public boolean getAllowMultiple() {
return descriptor.isAllowMultiple();
}
@Override
public boolean isRestorable() {
if (element == null) {
return false;
}
String string = element.getAttribute(IWorkbenchRegistryConstants.ATT_RESTORABLE);
return string == null ? true : Boolean.parseBoolean(string);
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter != null && adapter.equals(IConfigurationElement.class)) {
return adapter.cast(getConfigurationElement());
}
return null;
}
public IConfigurationElement getConfigurationElement() {
return element;
}
@Override
public String getLocalId() {
return getId();
}
@Override
public String getPluginId() {
return getConfigurationElement().getNamespaceIdentifier();
}
}